草庐IT

C++ sizeof 包装类

全部标签

c# - 为 C# 包装 native DLL

我编写了一个C++DLL,现在我需要从托管应用程序调用native函数。导出的原生函数如下所示:extern"C"__declspec(dllexport)boolNativeMethod(char*param1,char*param2,char*result);因此,在C#中,我将调用该函数传递2个输入参数、1个输出参数,显然我将读取返回的bool值。我尝试以多种方式包装所有这些,但总是遇到PInvokeStackImbalance异常。我知道调用native函数的唯一方法是在.NET函数声明上应用CallingConvention=CallingConvention.Cdecl)。

c++ - unsigned关键字会影响sizeof的结果吗?

C和C++是否保证类型的无符号等价物具有相同的大小?例子:size_tsize=sizeof(unsignedint);unsigned在这里完全没有实际意义吗? 最佳答案 两种语言都保证相应标准整数类型的有符号和无符号变体具有相同的大小。C++,委员会草案n3337,3.9.1/3:3Foreachofthestandardsignedintegertypes,thereexistsacorresponding(butdifferent)standardun-signedintegertype:“unsignedchar”,“un

c++ - 通过 std::function 包装重载函数

我有一个重载函数,我想将其包装在std::function中传递。GCC4.6没有找到“匹配函数”。虽然我确实在这里找到了一些问题,但答案并不像我希望的那样清楚。有人能告诉我为什么以下代码不能扣除正确的重载以及如何(优雅地)解决它吗?inttest(conststd::string&){return0;}inttest(conststd::string*){return0;}intmain(){std::functionfunc=test;returnfunc();} 最佳答案 这是模棱两可的情况。为了消除歧义,使用显式转换为:ty

c++ - 在 std::enable_if 中使用 sizeof...

下面的代码无法编译,我就是想不通为什么。templatetypenamestd::enable_if0>::typefunc(){//nop}产生的错误信息是:error:expectedunqualified-idbeforenumericconstanttypenamestd::enable_if0u>::typefunc(){^ 最佳答案 您需要括号才能让编译器正确解析它:templatetypenamestd::enable_if0)>::typefunc(){^^//nop}

c++ - 将动态数组包装到 STL/Boost 容器中?

我需要将动态分配的数组(例如来自a=newdouble[100])包装到std::vector(最好)而不复制数组。此限制是由于我要包装的数组是从文件中映射而来的,因此只需执行vector(a,a+size)就会使内存使用量加倍。有什么技巧可以做到吗? 最佳答案 最好的解决方案之一是STLSoft'sarray_proxy。模板。不幸的是,doxygen从源代码生成的文档页面对理解模板没有多大帮助。源代码实际上可能更好一些:http://www.stlsoft.org/doc-1.9/array__proxy_8hpp-source

c++ - 为什么 sizeof(13.33) 是 8 个字节?

当我给sizeof(a)时,其中a=13.33是一个浮点变量,大小是4个字节。但是如果我直接给sizeof(13.33),大小就是8个字节。我不明白发生了什么。有人可以帮忙吗? 最佳答案 这些是语言的规则。13.33是一个数字文字。它被视为double,因为它是double的。如果您希望将13.33视为浮点字面值,则声明13.33f。13.33是双重文字。如果sizeof(float)==4,sizeof(13.33f)==4也应该成立,因为13.33f是一个float。 关于c++-为

c++ - 我如何编写一个迭代器包装器来组合来自底层迭代器的顺序值组?

考虑以下顺序:1,2,3,4,5,6,7,8,9,10我有那个序列的输入迭代器。我想将这些迭代器包装在生成以下序列的迭代器上:(1,2),(3,4),(5,6),(7,8),(9,10)如果不清楚,这个序列是从原始序列开始的连续对连续元素的序列。虽然原始序列有10个元素,但这个元素有5个:每个元素都是从原始序列中的两个元素中获得的。我正在使用Boost的iterator_facade来实现它,但我对此有错误的尝试:templatestructpairing_iterator:boost::iterator_facade,std::array::value_type,2>,std::in

c++ - 尝试包装函数返回值时出现 "<class name> does not provide a call operator"错误

我正在尝试编写一个函数,它将一个仿函数作为参数,调用仿函数,然后返回它的返回值,并将其包装在boost::shared_ptr中。以下拒绝编译,我完全没有想法。我得到“std::vector不提供调用操作符”(大致)。我在MacOSX上使用Clang3.1。templateboost::shared_ptrReturnValueAsShared(boost::functionfunc){returnboost::make_shared(func());}这是我尝试使用它的上下文:make_shared>>>(bind(ReturnValueAsShared>,bind([afuncti

c++ - 为什么使用默认构造函数构造的对象的 `sizeof` 总是得到 1?

当我写下面的代码时:#includestructgg{gg(){}inta,b,c;};intmain(){std::cout结果是1。但是当我使用非默认构造函数时,就像这样:#includestructgg{gg(intx){}inta,b,c;};intmain(){std::cout输出为12。因为这两个示例在gg中具有相同的数据成员,所以我希望它们都产生相同的输出。为什么sizeof(gg())结果是1? 最佳答案 sizeof有两个版本。一个需要一元表达式,另一个需要带括号的type-id。第一个版本未评估其操作数。以下是

c++ - 如何理解 "C++ allows sizeof(char*) != sizeof(int*)"?

我正在读这个post与char和byte相关,并遇到以下单词:Anint*couldstillbeimplementedasasinglehardwarepointer,sinceC++allowssizeof(char*)!=sizeof(int*).如何理解'C++允许sizeof(char*)!=sizeof(int*)'? 最佳答案 有些(或曾经)机器只能处理整个“单词”,其中一个单词大到足以容纳多个字符。例如,PDP-6/10的字长为36位。在这样的机器上,您可以实现9位字节并将字节指针表示为字指针和字内位索引的组合。一个